package com.spring.util;

import com.jntoo.db.utils.CollectUtil;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

/**
 * 创建分页信息
 */
public class PageInfoUtil {

    private int page = -1;

    public PageInfoUtil() {}

    public PageInfoUtil(int page) {
        this.page = page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getPage() {
        return page;
    }

    public void setPageInfo(HttpServletRequest request, CollectUtil collect) {
        request.setAttribute("page", collect);
        request.setAttribute("totalCount", collect.getTotalRows());
    }

    public void setPageInfo(HttpServletRequest request, long total, long pagesize) {
        String urlRule = getRequestUrlPath();
        CollectUtil collect = new CollectUtil(page, total, pagesize);
        collect.setUrlRule(urlRule);
        setPageInfo(request, collect);
    }
//根据当前请求的信息构建并返回请求的 URL 路径。
public String getRequestUrlPath() {
    // 获取当前的HttpServletRequest对象
    HttpServletRequest request = Request.getRequest();

    // 获取请求的查询字符串（query string）
    String queryString = request.getQueryString();
    if (queryString == null) {
        queryString = "";
    }

    // 创建一个StringBuffer对象，并将请求的URI添加到缓冲区中
    StringBuffer buffer = new StringBuffer(queryString.length() + 16);
    String requestURI = request.getRequestURI();
    buffer.append(requestURI).append("?");

    // 获取请求的参数映射（parameter map）
    Map<String, String[]> param = request.getParameterMap();
    String name = "";
    String value = "";
    boolean isSearchPage = false;
    int page = -1;

    // 遍历参数映射的条目，处理每个参数名和对应的值
    for (Map.Entry<String, String[]> entry : param.entrySet()) {
        try {
            name = entry.getKey();
            String[] values = entry.getValue();

            if (name.equals("page")) {
                // 如果参数名是 "page"，则将其值转换为整数，并将 "{page}" 添加到URL中，表示占位符
                page = Integer.valueOf(values[0]).intValue();
                buffer.append(name).append("=").append("{page}").append("&");
                isSearchPage = true;
            } else if (null == values) {
                // 如果值为null，则将参数名添加到URL中，并不包含值
                buffer.append(name).append("=").append("&");
            } else if (values.length > 1) {
                // 如果值的长度大于1，则遍历每个值，并进行URL编码后添加到URL中
                for (int i = 0; i < values.length; i++) { //用于请求参数中有多个相同名称
                    value = URLEncoder.encode(values[i], "UTF-8");
                    buffer.append(name).append("=").append(value).append("&");
                }
                //value = value.substring(0, value.length() - 1);
            } else {
                // 如果值的长度为1，则将值进行URL编码后添加到URL中
                value = URLEncoder.encode(values[0], "UTF-8");
                buffer.append(name).append("=").append(value).append("&"); //用于请求参数中请求参数名唯一
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    // 如果方法中的page属性为-1，则将其设置为解析到的page值
    if (this.page == -1) {
        this.page = page;
    }

    // 将page属性的值与1比较，取较大值
    this.page = Math.max(this.page, 1);

    // 如果不是搜索页面（isSearchPage为false），则将"page={page}"添加到URL中
    if (!isSearchPage) {
        buffer.append("page={page}&");
    }

    // 将缓冲区中的内容转换为字符串，并去除最后一个字符（"&"）
    String result = buffer.toString();
    String urlRule = result.substring(0, result.length() - 1);
    return urlRule;
}
}
